import dayjs from 'dayjs'
// 日期工具函数
/**
 * @description 获取距今前几个月时间
 * @param {Number} count 开始时间与结束时间间隔多少个月
 * @returns {Object} {endTime: "2022-06-01"
startTime: "2022-05-01"}
 */
export function getStartAndEndMonth(count = 1) {
  let startTime = new Date().setMonth(new Date().getMonth() - count)
  let endTime = new Date()
  startTime = dayjs(startTime).format('YYYY-MM-DD')
  endTime = dayjs(endTime).format('YYYY-MM-DD')
  return {
    startTime,
    endTime
  }
}

// 生成指定范围的数组 range(1, 31) => [1, 2, 3, .... 30]
export function range(start, end) {
  const arr = []
  for (let i = start; i < end; i++) {
    arr.push(i)
  }
  return arr
}

// 获取最近 30 天的日期
export function last30dates() {
  const endDayjs = dayjs()
  const endYear = endDayjs.year()
  const endMonth = endDayjs.month() + 1
  const endMonthString =
    endMonth < 10 ? '0' + endMonth.toString() : endMonth.toString()
  const endDate = endDayjs.date()
  const startDayjs = dayjs().subtract(29, 'days')
  const startYear = startDayjs.year()
  const startMonth = startDayjs.month() + 1
  const startMonthString =
    startMonth < 10 ? '0' + startMonth.toString() : startMonth.toString()
  const startDate = startDayjs.date()
  const dates = []
  if (endMonth === startMonth) {
    // 同一个月，直接改变天数
    range(startDate, endDate + 1).forEach(item => {
      if (item < 10) {
        item = '0' + item.toString()
      }
      dates.push(`${endYear}-${endMonthString}-${item}`)
    })
  } else if (endMonth === startMonth + 1 || startMonth - endMonth === 11) {
    // 上一个月和当前月
    // 上个月
    range(startDate, startDayjs.daysInMonth() + 1).forEach(item => {
      if (item < 10) {
        item = '0' + item.toString()
      }
      dates.push(`${startYear}-${startMonthString}-${item}`)
    })

    // 当前月
    range(1, endDate + 1).forEach(item => {
      if (item < 10) {
        item = '0' + item.toString()
      }
      dates.push(`${endYear}-${endMonthString}-${item}`)
    })
  } else if (endMonth === startMonth + 2) {
    // 上上个月、上个月和当前月，遇到 2 月时
    // 上上个月
    range(startDate, startDayjs.daysInMonth() + 1).forEach(item => {
      if (item < 10) {
        item = '0' + item.toString()
      }
      dates.push(`${startYear}-${startMonthString}-${item}`)
    })

    // 2 月
    range(1, startDayjs.add(1, 'months').daysInMonth() + 1).forEach(item => {
      if (item < 10) {
        item = '0' + item.toString()
      }
      dates.push(`${startYear}-02-${item}`)
    })

    // 当前月
    range(1, endDate + 1).forEach(item => {
      if (item < 10) {
        item = '0' + item.toString()
      }
      dates.push(`${endYear}-${endMonthString}-${item}`)
    })
  }

  return dates
}
